[−][src]Crate popol
Minimal non-blocking I/O library.
Example: reading from stdin
use std::{io, io::prelude::*, process, time}; fn main() -> io::Result<()> { // Create a registry to hold I/O sources. let mut sources = popol::Sources::with_capacity(1); // Create an events buffer to hold readiness events. let mut events = popol::Events::with_capacity(1); // Register the program's standard input as a source of "read" readiness events. sources.register((), &io::stdin(), popol::interest::READ); // Wait on our event sources for at most 6 seconds. If an event source is // ready before then, process its events. Otherwise, timeout. match sources.wait_timeout(&mut events, time::Duration::from_secs(6)) { Ok(()) => {} Err(err) if err.kind() == io::ErrorKind::TimedOut => process::exit(1), Err(err) => return Err(err), } // Iterate over source events. Since we only have one source // registered, this will only iterate once. for ((), event) in events.iter() { // The standard input has data ready to be read. if event.readable || event.hangup { let mut buf = [0; 1024]; // Read what we can from standard input and echo it. match io::stdin().read(&mut buf[..]) { Ok(n) => io::stdout().write_all(&buf[..n])?, Err(err) => panic!(err), } } } Ok(()) }
Re-exports
pub use interest::Interest; |
Modules
interest | Source readiness interest. |
Structs
Event | A source readiness event. |
Events | Populated by |
Source | A source of readiness events, eg. a |
Sources | Keeps track of sources to poll. |
Waker | Wakers are used to wake up |